package ma.belsoft.syga.model;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.appfuse.Constants.BoiteVitesse;
import org.appfuse.Constants.CouleurExtVehicule;
import org.appfuse.Constants.CylindresVehicule;
import org.appfuse.Constants.EnergieVehicule;
import org.appfuse.Constants.PeintureVehicule;
import org.appfuse.Constants.PortesVehicule;
import org.appfuse.Constants.PuissanceFiscale;
import org.appfuse.Constants.TextureVehicule;
import org.appfuse.model.BaseObject;
import org.hibernate.annotations.CollectionOfElements;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.IndexColumn;

@Entity
@Table(name = "vehicule")
public class Vehicule extends BaseObject {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3832626162173359411L;

	/**
	 * 
	 */
	


	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="vehicule_id")
	private Long id;
	
	
	private String modele;
	
	
	private Date anneeSortie;
	
	/**
	 * Le type de la boite de vitesse
	 */
	@Column(name="boite_vitesse")
	private BoiteVitesse boiteVitesse;
	
	
	
	/**
	 * L'énergie du véhicule : diésel, Essence, Eléctrique
	 */
	@Column(name="energie")
	private EnergieVehicule energie;
	
	
	
	/**
	 * Nombres de Kilométre parcouru avec Véhicule
	 */
	@Column(name="kilometrage")
	private int kilometrage;
	
	
	
	/**
	 * Puissance Fiscale en Cv
	 */
	@Column(name="puissance_fiscale")	
	private PuissanceFiscale  puissanceFiscale;
	
	
	/**
	 * 
	 Les Cylindres
	 */
	@Column(name="cylindre")
	private CylindresVehicule cylindre;
	

	/**
	 * 
	Nombres de Portes
	 */
	@Column(name="nombre_portes")
	private PortesVehicule portes;
	

	/**
	 qualité du véhicule si C'est la premiére main ou c'est un véhicule d'occasion
	 */
	@Column(name="premiere_main")
	private Boolean premiereMain;
	

	/**
	  Couleur Extérieur du vehicule
	 */
	@Column(name="couleur_exterieure")
	private CouleurExtVehicule couleurExterieure;
	
	
	
	/**
	 * Peinture: Métal, Vernis...
	 */
	@Column(name="peinture")
	private PeintureVehicule peinture;
	
	
	
	/**
	 cuir, Jean, Semi-cuir
	 */
	@Column(name="texture")
	private TextureVehicule texture;
	
	
	@Column(name="prix_demande")
	private float prixDemande;
	
	@CollectionOfElements(fetch = FetchType.EAGER) 
	@IndexColumn(name = "photos") 
	@Fetch(FetchMode.SUBSELECT) 
	private List<String> photos;
	
	
	
	@Column(name="dedouane")
	private Boolean dedouane;
	
	@Column(name="date_dedouanement")
	private Date dateDedouanement;
	
	
	
	/**
	 Si le Véhicule a déja été accidenté
	 */
	@Column(name="accidente")
	private Boolean accidente;
	
	
	@ManyToOne(fetch=FetchType.EAGER, optional=false)
	@JoinColumn(name="marque_id")
	private Marque marque;
	
	@ManyToOne(fetch=FetchType.EAGER, optional=false)
	@JoinColumn(name="ville_id")
	private Ville ville;

	public Long getId() {
		return id;
	}

	public void setIdVehicule(Long id) {
		this.id = id;
	}

	

	public String getModele() {
		return modele;
	}

	public void setModele(String modele) {
		this.modele = modele;
	}

	public Date getAnneeSortie() {
		return anneeSortie;
	}

	public void setAnneeSortie(Date anneeSortie) {
		this.anneeSortie = anneeSortie;
	}


	public int getKilometrage() {
		return kilometrage;
	}

	public void setKilometrage(int kilometrage) {
		this.kilometrage = kilometrage;
	}



	

	public Boolean getPremiereMain() {
		return premiereMain;
	}

	public void setPremiereMain(Boolean premiereMain) {
		this.premiereMain = premiereMain;
	}

	
	public float getPrixDemande() {
		return prixDemande;
	}

	public void setPrixDemande(float prixDemande) {
		this.prixDemande = prixDemande;
	}

	public List<String> getPhotos() {
		return photos;
	}

	public void setPhotos(List<String> photos) {
		this.photos = photos;
	}

	
	public Boolean getDedouane() {
		return dedouane;
	}

	public void setDedouane(Boolean dedouane) {
		this.dedouane = dedouane;
	}

	public Date getDateDedouanement() {
		return dateDedouanement;
	}

	public void setDateDedouanement(Date dateDedouanement) {
		this.dateDedouanement = dateDedouanement;
	}

	public Boolean getAccidente() {
		return accidente;
	}

	public void setAccidente(Boolean accidente) {
		this.accidente = accidente;
	}

	public void setId(long id) {
		this.id = id;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean equals(Object o) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		return 0;
	}

	public void setBoiteVitesse(BoiteVitesse boiteVitesse) {
		this.boiteVitesse = boiteVitesse;
	}

	public BoiteVitesse getBoiteVitesse() {
		return boiteVitesse;
	}

	public EnergieVehicule getEnergie() {
		return energie;
	}

	public void setEnergie(EnergieVehicule energie) {
		this.energie = energie;
	}

	public PuissanceFiscale getPuissanceFiscale() {
		return puissanceFiscale;
	}

	public void setPuissanceFiscale(PuissanceFiscale puissanceFiscale) {
		this.puissanceFiscale = puissanceFiscale;
	}

	public CylindresVehicule getCylindre() {
		return cylindre;
	}

	public void setCylindre(CylindresVehicule cylindre) {
		this.cylindre = cylindre;
	}

	public PortesVehicule getPortes() {
		return portes;
	}

	public void setPortes(PortesVehicule portes) {
		this.portes = portes;
	}

	public CouleurExtVehicule getCouleurExterieure() {
		return couleurExterieure;
	}

	public void setCouleurExterieure(CouleurExtVehicule couleurExterieure) {
		this.couleurExterieure = couleurExterieure;
	}

	public PeintureVehicule getPeinture() {
		return peinture;
	}

	public void setPeinture(PeintureVehicule peinture) {
		this.peinture = peinture;
	}

	public TextureVehicule getTexture() {
		return texture;
	}

	public void setTexture(TextureVehicule texture) {
		this.texture = texture;
	}

	public void setMarque(Marque marque) {
		this.marque = marque;
	}

	public Marque getMarque() {
		return marque;
	}

	public void setVille(Ville ville) {
		this.ville = ville;
	}

	public Ville getVille() {
		return ville;
	}
	

}
